themingbackground: Avoid erroring cairo context
authorBenjamin Otte <otte@redhat.com>
Fri, 23 Dec 2011 21:23:40 +0000 (22:23 +0100)
committerBenjamin Otte <otte@redhat.com>
Fri, 23 Dec 2011 21:30:45 +0000 (22:30 +0100)
gtk/gtkthemingbackground.c

index 75ef3529edb62ddf2fa2af66e00b16c66eea9a30..a525e185563b01bd638212ef10b3f858271d0359 100644 (file)
@@ -304,9 +304,6 @@ _gtk_theming_background_paint (GtkThemingBackground *bg,
                               "background-repeat", &repeat,
                               NULL);
 
-      /* Fill background color first */
-      cairo_fill_preserve (cr);
-
       if (cairo_pattern_get_surface (bg->pattern, &surface) != CAIRO_STATUS_SUCCESS)
         surface = NULL;
 
@@ -327,16 +324,22 @@ _gtk_theming_background_paint (GtkThemingBackground *bg,
           scale_height = bg->image_rect.height;
         }
 
-      cairo_translate (cr, bg->image_rect.x, bg->image_rect.y);
-      cairo_scale (cr, scale_width, scale_height);
-      cairo_set_source (cr, bg->pattern);
-      cairo_scale (cr, 1.0 / scale_width, 1.0 / scale_height);
-      cairo_translate (cr, -bg->image_rect.x, -bg->image_rect.y);
+      if (scale_width && scale_height)
+        {
+          /* Fill background color first */
+          cairo_fill_preserve (cr);
+
+          cairo_translate (cr, bg->image_rect.x, bg->image_rect.y);
+          cairo_scale (cr, scale_width, scale_height);
+          cairo_set_source (cr, bg->pattern);
+          cairo_scale (cr, 1.0 / scale_width, 1.0 / scale_height);
+          cairo_translate (cr, -bg->image_rect.x, -bg->image_rect.y);
 
-      g_free (repeat);
+          g_free (repeat);
 
-      cairo_pattern_destroy (bg->pattern);
-      bg->pattern = NULL;
+          cairo_pattern_destroy (bg->pattern);
+          bg->pattern = NULL;
+        }
     }
 
   cairo_fill (cr);